start:
	$03/8497 20 B0 84    JSR $84B0  [$00:84B0] ; sub_0
	$03/849A 9C 10 1C    STZ $1C10  [$01:1C10]  
	$03/849D 9C 12 1C    STZ $1C12  [$01:1C12]  
	$03/84A0 20 DE 84    JSR $84DE  [$03:84DE] ; sub_3
	$03/84A3 20 49 85    JSR $8549  [$03:8549] ; sub_4

sub_0:
	$03/84B0 A0 EC 5A    LDY #$5AEC
	$03/84B3 22 52 8D 00 JSL $008D52[$00:8D52] ; sub_5
	$03/84B7 A0 00 00    LDY #$0000           
	$03/84BA B9 00 17    LDA $1700,y[$01:1700]
	$03/84BD 29 FF 00    AND #$00FF
	$03/84C0 09 00 20    ORA #$2000
	$03/84C3 22 86 8D 00 JSL $008D86[$00:8D86] ; sub_1
	$03/84C7 C8          INY
	$03/84C8 C0 08 00    CPY #$0008
	$03/84CB 90 ED       BCC $ED    [$84BA]
	$03/84CD 22 91 8D 00 JSL $008D91[$00:8D91] ; sub_2
	$03/84D1 60          RTS

sub_1:
	$00/8D86 A6 50       LDX $50    [$00:0050]
	$00/8D88 9F 00 00 7E STA $7E0000,x[$7E:2C00]
	$00/8D8C E8          INX                    
	$00/8D8D E8          INX                    
	$00/8D8E 86 50       STX $50    [$00:0050]  
	$00/8D90 6B          RTL     

sub_2:	
	$00/8D91 A6 4E       LDX $4E    [$00:004E]  
	$00/8D93 38          SEC                    
	$00/8D94 A5 50       LDA $50    [$00:0050]  
	$00/8D96 FF FB FF 7D SBC $7DFFFB,x[$7D:2806]
	$00/8D9A 9F FE FF 7D STA $7DFFFE,x[$7D:2809]
	$00/8D9E 6B          RTL                    

sub_3:
	$03/84DE A2 07 00    LDX #$0007             
	$03/84E1 A5 86       LDA $86    [$00:0086]  
	$03/84E3 8D 10 1C    STA $1C10  [$01:1C10]  
	$03/84E6 A5 88       LDA $88    [$00:0088]  
	$03/84E8 8D 11 1C    STA $1C11  [$01:1C11]  
	$03/84EB 18          CLC                    
	$03/84EC 65 86       ADC $86    [$00:0086]  
	$03/84EE 8D 12 1C    STA $1C12  [$01:1C12]  
	$03/84F1 BD 00 17    LDA $1700,x[$01:1707]  
	$03/84F4 29 FF 00    AND #$00FF             
	$03/84F7 49 FF 00    EOR #$00FF             
	$03/84FA 18          CLC                    
	$03/84FB 6D 12 1C    ADC $1C12  [$01:1C12]  
	$03/84FE 8D 12 1C    STA $1C12  [$01:1C12]  
	$03/8501 CA          DEX                    
	$03/8502 10 ED       BPL $ED    [$84F1]     
	$03/8504 60          RTS

sub_4:
	$03/8549 A9 00 00    LDA #$0000           
	$03/854C E2 20       SEP #$20             
	$03/854E A0 00 00    LDY #$0000           
	$03/8551 84 00       STY $00    [$00:0000]
	$03/8553 B9 7D D0    LDA $D07D,y[$01:D07D]
	$03/8556 AA          TAX                  
	$03/8557 BD 10 1C    LDA $1C10,x[$01:1C12]
	$03/855A 85 02       STA $02    [$00:0002]
	$03/855C B9 7E D0    LDA $D07E,y[$01:D07E]
	$03/855F AA          TAX                  
	$03/8560 A5 02       LDA $02    [$00:0002]
	$03/8562 E0 00 00    CPX #$0000           
	$03/8565 F0 05       BEQ $05    [$856C]   
	$03/8567 4A          LSR A                
	$03/8568 4A          LSR A                
	$03/8569 CA          DEX                  
	$03/856A 80 F6       BRA $F6    [$8562]   
	$03/856C A6 00       LDX $00    [$00:0000]
	$03/856E 9D 20 1C    STA $1C20,x[$01:1C20]
	$03/8571 E6 00       INC $00    [$00:0000]
	$03/8573 C8          INY                  
	$03/8574 C8          INY                  
	$03/8575 C0 20 00    CPY #$0020           
	$03/8578 90 D9       BCC $D9    [$8553]   
	$03/857A C2 30       REP #$30             
	$03/857C 60          RTS                  

sub_5:
	$00/8D52 A9 80 00    LDA #$0080              
	$00/8D55 A6 4E       LDX $4E    [$00:004E]   
	$00/8D57 9F 00 00 7E STA $7E0000,x[$7E:0F20] 
	$00/8D5B 98          TYA                     
	$00/8D5C 9F 04 00 7E STA $7E0004,x[$7E:0F24] 
	$00/8D60 A9 01 18    LDA #$1801              
	$00/8D63 9F 02 00 7E STA $7E0002,x[$7E:0F22] 
	$00/8D67 A5 50       LDA $50    [$00:0050]   
	$00/8D69 9F 06 00 7E STA $7E0006,x[$7E:0F26] 
	$00/8D6D A9 7E 00    LDA #$007E              
	$00/8D70 9F 08 00 7E STA $7E0008,x[$7E:0F28] 
	$00/8D74 8A          TXA                     
	$00/8D75 18          CLC                     
	$00/8D76 69 0B 00    ADC #$000B              
	$00/8D79 85 4E       STA $4E    [$00:004E]   
	$00/8D7B 6B          RTL
	

// C-like port of SCV4's Password generation routine.

/*
	This part stores a series of (supposedly) masks to $7E:0000 + $4E
	80 00 01 18 EC 5A 00 7E
*/

X = $4E;

$7E:0000[X] = 0x0080; 
$7E:0002[X] = 0x1801;
$7E:0004[X] = 0x5AEC;
$7E:0008[X] = 0x007E;

$4E += #$000B;

/*
	This part copies the each letter of the player's name succeeded
	by a 0x20, making a 0x10 bytes chunk.
	
	'FOG' -> 10 20 19 20 11 20 00 20 00 20 00 20 00 20 00 20
*/

for(Y = 0x00; Y < 0x08; Y++) {
	
	A = (($01:1700[Y] & 0xFF) | 0x2000);	
	X = $50;
	$7E:0000[X] = A;
	X += 0x02;
}

X = $4E;
A -= $7D:FFFB[X];
$7D:FFFE[X] = A;

$01:1C10 = 0x00;
$01:1C12 = 0x00;

/*
	Checksum builder @ $01:1C12 (INT16)
*/

$01:1C10 = $86;
A = $88;
$01:1C11 = A;
A += $86;
$01:1C12 = A;

for(X = 0x07; X >= 0; X--)
	$01:1C12 += (($01:1700[X] & 0xFF) ^ 0xFF); 


/*
	Checksum nibble table @ $01:D07D
	
	02 03 01 00 03 02 02 01 03 01 00 00 01 02 03 00 
	01 01 02 00 03 03 00 02 00 01 02 02 00 03 01 03

*/

char cntTable[] = {02,03,01,00,03,02,02,01,03,01,00,00,01,02,03,00,
		   01,01,02,00,03,03,00,02,00,01,02,02,00,03,01,03};

A = 0x0;
Y = 0x0;
$00 = 0x0;

while(Y < 20) {
	X = cntTable[Y];
	$02 = $01:1C10[X];
	X = cntTable[Y + 1];
	
	A = $02;
	while(X != 0) {
		A >>= 2;
		X--;
	}

	X = $00;
	$01:1C20[X] = A;
	$00++;
	Y += 2;
}


Area masking table @ $01:FBAC SIZE = 0x43

00 00 00 00 00 00 00 00 08 08 08 08 0C 0C 0C 0C
0C 0C 12 12 12 12 12 12 18 18 1A 1A 1A 1A 1A 1A
1A 1A 1A 23 23 23 23 23 23 23 2A 2A 2A 2A 2E 2E
2E 2E 2E 2E 2E 2E 2E 37 37 37 37 37 3C 3C 3C 3F
40 41 42 42